Samba(サンバ)は、UNIXおよびUNIX互換コンピュータを、Windowsのファイルサーバ、プリントサーバ、ドメインコントローラーとして使用するためのオープンソースソフトウェアです。
ここでは、LinuxやBSDなどを中心としたUNIX系OSにおいて
Windows NT/2000互換のファイルサーバ/プリント・サーバ機能を提供するSamba
について解説していきます。Samba はバージョンがあがるたびに機能が拡張されており、現在の代表的な機能としては、ファイルサーバー機能、プリントサーバー機能、WINSサーバー機能、PDC機能(プライマリドメインコントローラ)、DFS機能(マイクロソフトの分散ファイルシステム)、ブラウザからSambaを簡単に管理できるSWAT
機能などがあります。Samba3.0 以降からはKerberos認証のサポートしたことにより、Windows
2000のActive Directoryへの参加も可能となっています。なお、当ページではそのSamba
の最も一般的な機能であるファイルサーバーに絞って解説していきます。
Version | samba-3.0.1 |
Homepage | http://www.samba.org/ http://www.samba.gr.jp/ (日本Sambaユーザ会) |
Download | ftp://ftp.ring.gr.jp/pub/net/samba/ |
Install | samba-3.0.1.tar.gz |
$ cd /usr/local/src/ $ tar xzvf samba-3.0.1.tar.gz $ cd samba-3.0.1/source |
configureオプションには、デフォルトでno とされているいくつかのオプションを追加してみました。configure
--help で何がデフォルトで有効か無効かがわかりやすいので一度は見てみることをお勧めします。詳細に関しては以下表を参照してください。コンパイルは結構時間がかかるので珈琲タイム♪
$ ./configure --with-smbwrapper
\ --with-pam \ --with-syslog \ --with-quotas \ --with-winbind \ --with-acl-support \ --with-profiling-data \ --with-smbwrapper \ --with-automount \ --with-smbmount \ --with-utmp $ make # make install |
--with-pam | PAM認証を有効のサポート |
--with-syslog | syslog への出力をサポート |
--with-quotas | Quata 機能(容量制限)をサポート |
--with-winbind | Windows NTドメインユーザーとUNIXユーザーの統一ログインを可能にする |
--with-acl-support | ACL機能をサポート |
--with-profiling-data | 性能に関する情報の収集 |
--with-smbwrapper | smbsh機能を有効にする |
--with-automount | automountをサポート |
--with-smbmount | smbfs機能をサポートするコマンドを作成 |
--with-utmp | utmpによるユーザーのアクセス記録の収集をサポート |
Samba の設定ファイルはデフォルトではインストールされませんので、サンプルファイルからコピーして利用するか、自分で設定ファイルを作成してください。サンプルファイルは、ソースディレクトリ内の、examples
ディレクトリ、もしくは、packaging ディレクトリにいくつか用意されています。ここでは、RedHat用のサンプルファイルを参考に、必要最低限な設定箇所を以下に解説していきます。
# cp /usr/local/src/samba-3.0.1/packaging/RedHat/smb.conf
/usr/local/samba/lib/smb.conf # ln -s /usr/local/samba/lib/smb.conf /etc/smb.conf |
samba3.0からの注意点としては、日本語の扱いが従来までのSamba の設定とは変更された点です。以下が従来までの記述の仕方です。
coding system =
euc client code page = 932 |
Samba3.0からはパラメータが変更され、上記のような記述ではなく、以下のようにおきかわりました。
unix charset = EUC-JP dos charset = CP932 display charset = EUC_JP |
unix charset | UNIX側での文字コードの設定 |
dos charset | Windows側での文字コードの設定。日本語を利用する場合は、CP932になります。 |
display charset | swat で表示される文字コードの指定 |
[global] unix charset = EUC-JP dos charset = CP932 display charset = CP932 workgroup = click-rescue.com //Windowsのドメインを指定 server string = Samba Server //コンピュータ名に表示されるコメント hosts allow = 172.16.50. 172.16.51. 127. //許可するネットワーク log file = /var/log/samba/log.%m max log size = 50 //ログファイルの最大サイズ security = user //認証方法 encrypt password = yes //パスワードを暗号化して送信 smb passwd file = /etc/samba/smbpasswd //パスワードファイルの場所 socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 dns proxy = no netbios name = linux //Windows 上で表示されるコンピュータ名 # log level = 3 //0の場合は何もメッセージを残さない # winbind use default domain = yes # utmp = Yes # dos filetimes = yes // ファイルのタイムスタンプの変更を許可 |
[public] がWindows 上で表示される共有フォルダの名前になります。comment
は共有ディレクトリに関するコメントを記述します。path は、共有ディレクトリの絶対パスを記述しておきます。public
= yes は、共有ディレクトリにするならば、必ず、「yes 」としておきましょう。「yes 」にしておくとディレクトリにアクセスする際に、パスワードを聞かれなくなります。
[public] comment = Public Stuff path = /home/samba browseable = yes public = yes //「yes」の場合はパスワードが不要、「no」はパスワード必要 create mode = 664 directory mode = 775 |
また、ディレクトリ自体のパーミッションも変更しておきます。
# chmod 777 /home/samba |
homes セクションではユーザーごとのホームディレクトリをWindows 上で共有できるようにします。当然、ホームディレクトリの所有者以外、アクセスすることはできません。
[homes] comment = Home Directories browseable = no //「yes」にすると「homes」ディレクトリが見えてしまう writable = yes create mode = 644 directory mode = 755 |
smb.conf を編集した際には、構文間違いがないかを testparm で確認しておきます。testparm
は、smb.conf に未知のパラメータがないかを検査してくれるコマンドです。エラーが表示されなければOKです。編集したら常にtestparm
を実行するようにしてください。
# /usr/local/samba/bin/testparm /etc/samba/smb.conf |
sambaのパスワードの暗号化形式は、Linuxログイン時に使用するshadow パスワードとは異なるため、smbpasswd
というファイルを作成しなくてはなりません。パスワードを作成するスクリプトとしてmksmbpasswd.sh
が用意されているのでスクリプトに実行権を与えた後、以下、コマンドを実行します。UNIXパスワードファイルを元にsambpasswd
ファイルを作成する事ができます。
# chmod 755 /usr/local/src/samba-3.0.1/source/script/mksmbpasswd.sh # cat /etc/passwd | /usr/local/src/samba-3.0.1/source/script/mksmbpasswd.sh > /etc/samba/smbpasswd |
あるいは、mksmbpasswd.sh を/usr/local/bin にコピーしておき、以下コマンドを実行しても同様の操作になります。
# cp /usr/local/src/samba-3.0.1/source/script/mksmbpasswd.sh
/usr/local/bin # mksmbpasswd.sh < /etc/passwd > /etc/samba/smbpasswd |
作成した後、smbpasswd からシステム用の不要なアカウントも削除しておいてください。また、パスワードファイルのパーミッションも適切に設定しておきます。
# vi /etc/samba/smbpasswd //不要なアカウントを削除しておく # chmod 600 /etc/samba/smbpasswd |
上記の操作ではSamba用のパスワードファイルは作成されましたが、パスワードは未設定の状態のままなので、smbpasswd
コマンドを使って、パスワードを設定します。
# /usr/local/samba/bin/smbpasswd
sakura New SMB password: Retype new SMB password: |
smbpasswd でパスワードを作成したユーザーのみ、以下のように表示されている事を確認してください。
# cat /etc/samba/smbpasswd sakura:500:CBEF1524C02D2BF66AFF3DDD7F8C47:[U ]:LCT-4080C996:sakura koro01:506:XXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXX:[U ]:LCT-00000000: koro02:507:XXXXXXXXXXXXXX:XXXXXXXXXXXXX:[U ]:LCT-00000000: |
Red Hat では標準でサービスとして追加されていますが、記述されていない場合は以下の2行を追加しておいてください。
netbios-ns 137/udp netbios-ssn 139/tcp |
Samba 用のログディレクトリはデフォルトでは作成されていませんので、予め作成しておきます。また、ログがローテートできるようにソースディレクトリ内にある、samba.log
を /etc/logrotate.d 以下にコピーしておきます。また、環境に合わせてローテートファイルも編集しなおしておいてください(「logrotate
によるログのローテーション」参照)。
# mkdir /var/log/samba # cp /usr/local/src/samba-3.0.1/packaging/RedHat/samba.log /etc/logrotate.d/samba # vi /etc/logrotate.d/samba |
log file = /var/log/samba/log.nmbd { weekly rotate 5 missingok postrotate /usr/bin/killall -HUP nmbd endscript } log file = /var/log/samba/log.smbd { weekly rotate 5 missingok postrotate /usr/bin/killall -HUP smbd endscript } |
Samba をデーモンとして起動させます。また、プロセスの確認も行っておいてください。
# /usr/local/samba/sbin/smbd
-D # ps aux | grep smb root 12830 0.0 0.8 8404 2176 ? S 17:14 0:00 /usr/local/samba/sbin/smbd |
以上で、Windows 上から、\\Sambaサーバー名\sakura でアクセスすることができるようになります。アクセスする際にユーザー名とパスワードを聞かれるので、先ほどsmbpasswd
で作成したパスワードを入力してください。
1) 全ユーザが共有するディレクトリ=>パスワード不要
2) 各ユーザのホームディレクトリ => パスワード要
上記ふたつの条件を満たす設定を以下に示します。
[global] security = SHARE map to guest = Bad User [homes] comment = Home Directories read only = No create mask = 0644 browseable = No [public] comment = Public Stuff path = /home/samba read only = No create mask = 0777 directory mask = 0777 guest only = Yes guest ok = Yes |
Samba が自動起動できるように、ソースディレクトリ内にあるsmb.init を /etc/rc.d/init.d
以下にコピーしておきます。また、smb.initを開いて、起動用パスやsmb.conf の格納されているパスを各自の環境に合わせて編集しておいてください。私の環境ではこちらのようにしています。
# cp /usr/local/src/samba-3.0.1/packaging/RedHat/smb.init /etc/rc.d/init.d/smb |
chkconfig --add でsmb を自動起動サービスに追加しておきます。
# chkconfig --add
smb # chkconfig --list smb smb 0:オフ 1:オフ 2:オフ 3:オン 4:オン 5:オン 6:オフ |
swat をxinetd 経由で動作させるための設定ファイルがソースディレクトリの中に用意されているのでそれを/etc/xinetd.d
にコピーしておきます。
# cd /usr/local/src/samba-3.0.1 # cp packaging/RedHat/samba.xinetd /etc/xinetd.d/swat |
デフォルトでは起動しないように設定されているので、disable = no に変更しておきます。
# vi /etc/xinetd.d/swat |
# default: off # description: SWAT is the Samba Web Admin Tool. Use swat \ # to configure your Samba server. To use SWAT, \ # connect to port 901 with your favorite web browser. service swat { port = 901 socket_type = stream wait = no only_from = 127.0.0.1 172.16.50.0/27 172.16.51.0/28 user = root server = /usr/local/samba/sbin/swat log_on_failure += USERID disable = no } |
変更したら、xinetd を再起動しておきます。
# /etc/init.d/xinetd restart |
netstat で901番がLISTEN状態になっていることを確認しておきます。
# netstat -an | grep
901 tcp 0 0 0.0.0.0:901 0.0.0.0:* LISTEN unix 2 [ ] DGRAM 901 |
なお、ブラウザでアクセスした際に、Swatのネットワークパスワードにroot のパスワードを入力してもログインできないことがありました。その時のsyslogを閲覧したら以下のようなエラーが発生していました。これは、/etc/pam.d/
以下にsamba ファイルが存在しないために起きているエラーでした。削除した覚えもないのでソースからインストールした場合はおそらく存在しないかもしれません。ということで、私はRPMパッケージをダウンロードしてきて、rpm2cpio
にて/etc/pam.d/samba を抽出し、元の位置にコピーしたところ、正常にswat にアクセスできるようになりました。
# tail -f /var/log/messages Aug 5 03:06:06 ns1 swat[7043]: [2005/08/05 03:06:06, 0] auth/pampass.c:smb_pam_passcheck(810) Aug 5 03:06:06 ns1 swat[7043]: smb_pam_passcheck: PAM: smb_pam_auth failed - Rejecting User root ! |
Swat の画面が文字化けしてしまう場合は、smb.conf にて、unix charset とdisplay
chaset のパラメータを同じ値(ここでは、UTF-8)にしてみてください。
unix charset = UTF-8 dos charset = CP932 display charset = UTF-8 |
Samba3.0以降、ゴミ箱の機能が使えるようになりました。ファイルを削除すると予め指定しておいたディレクトリに移動します。まず、smb.conf
を開いて[global]セクションに以下の行を付け加えます。ここでは、[homes]セクションにパラメータを記述していますが、全共有ディレクトリに同じ設定を適用したい場合は[global]セクションに記述してください。
# vi /usr/local/samba/lib/smb.conf |
[global] vfs objects = recycle [homes] recycle:repository = .recycle/%u # 削除されたファイルの移動先ディレクトリ。%u を付加する事で、削除したユーザのフォルダを 自動で作成してくれます。 recycle:keeptree = yes # ディレクトリ構造を維持してごみ箱に移動するか否かを指定する recycle:touch = yes # 削除の際に、ファイルのアクセス日を変更するか否か recycle:versions = yes # 同名ファイルが存在する場合に別名で保存するか否か recycle:maxsize = 0 # ゴミ箱に移動するファイルサイズの最大値(0で無制限) recycle:exclude = *.tmp # ごみ箱に移動せずに直接削除するファイルを指定 recycle:exclude_dir = /tmp/cache # 指定のディレクトリから削除されたファイルはゴミ箱に移動しない recycle:noversions = *.doc # recycle:versionsの反対。両方のオプションを設定すると、こちらが優先される |
予めゴミ箱ディレクトリを作成しておき、パーミッションを777に設定します。その後、Sambaを再起動し、設定を反映させてください。
# mkdir .recycle # chmod 777 .recycle # /etc/rc.d/init.d/smb restart |
共有したディレクトリにファイルを作成してから、削除してみてください。.recycle ディレクトリ以下に、自動的に自分のユーザ名のディレクトリが作成され、その下にファイルが移動されます。この自動で作成されたディレクトリのパーミッションは700となるので、他のユーザにゴミ箱内を勝手に見られる心配はなくなります。また、recycle:keeptreeも「recycle:repository
= .recycle/%u」とする事で正常に動作するようになります。
# ls -la /home/samba/.recycle/ 合計 12 drwx------ 2 sakura sakura 4096 8月 5 02:20 sakura |
.recycle ディレクトリをユーザひとりひとりに対して作成していくのは面倒なので、useradd コマンド時に自動的にコピーするように/etc/skel
に.recycle ディレクトリを作成しておきます。
# mkdir /etc/skel/.recycle |
Fedra Core3には、tmpwatch という/tmp ディレクトリ内のファイルを定期的に削除するパッケージがインストールされており、これを流用することで.recycle
ディレクトリ内も定期的に削除することができます。ここでは、10日間(240時間)アクセスのないファイルをゴミ箱へ削除することとします。まず、tmpwatchが/etc/cron.dailyに置かれていますので、このファイルを
/etc/cron.weekly/recyclewatch としてコピーしておきます。
# cd /etc/cron.daily/ # cp tmpwatch /etc/cron.weekly/recyclewatch |
次に、このrecyclewatch 以下のようにを編集します。
# vi /etc/cron.weekly/recyclewatch |
/usr/sbin/tmpwatch 240 /home/usr/.recycle /usr/sbin/tmpwatch 240 /home/samba/.recycle |
|
まず、Windows 上からSambaサーバーのディレクトリにアクセスした後、smbstatusコマンドを実行してみてください。現在、誰がどの共有ディレクトリにアクセスしているのかを閲覧することができます。
# /usr/local/samba/bin/smbstatus
-d Samba version 3.0.1 PID Username Group Machine ------------------------------------------------------- 3100 sakura sakura koro (172.16.50.4) 3103 sakura sakura koro (172.16.50.4) Service pid machine Connected at ------------------------------------------------------- source 3103 koro Sat Apr 17 20:41:46 2004 ↑↑ユーザーsakuraがsourceディレクトリにアクセスしている IPC$ 3100 koro Sat Apr 17 20:16:21 2004 IPC$ 3103 koro Sat Apr 17 20:20:17 2004 No locked files |
-b | 簡易表示 |
-d | 詳細表示 |
-u | 特定のユーザーの情報を表示する |
-L | ロックされたファイルの一覧を表示する |
LinuxクライアントからSambaサーバーへアクセスするには、クライアント自身にsamba-clientパッケージがインストールされている必要があります。インストールされていなければ、インストールしておいてください。
$ rpm -q samba-client $ rpm -ivh samba-client |
まず、アクセス可能なディレクトリを表示してみましょう。書式は、「smbclient -L Sambaサーバー名」です。Sambaサーバーに限らず、Windows
上のコンピュータ名も表示されます。
$ smbclient -L ns1 added interface ip=172.16.50.6 bcast=172.16.50.31 nmask=255.255.255.224 Password:********** //パスワードの入力 Domain=[click-rescue.com] OS=[Unix] Server=[Samba 3.0.1] Sharename Type Comment --------- ---- ------- public Disk Public Stuff source Disk Source Directory IPC$ IPC IPC Service (Samba Server) ADMIN$ IPC IPC Service (Samba Server) sakura Disk Home Directories Server Comment --------- ------- LINUX Samba Server Workgroup Master --------- ------- sakura KORO click-rescue.com LINUX WORKGROUP WOODY |
それでは実際に、smbclient コマンドを使ってSambaサーバーにアクセスしてみます。書式は、「smbclient
//Sambaサーバー名/共有資源名」です。パスワード入力後、smb: \> という対話形式のプロンプトが表示されます。使用できるコマンドはFTPコマンドとほぼ同様なので、ここでは説明を割愛させていただきます。FTPコマンドを日常的に使用している方ならファイルのアップロード/ダウンロードが容易でしょう。
$ smbclient //ns1/homes added interface ip=172.16.50.6 bcast=172.16.50.31 nmask=255.255.255.224 Password: # パスワードの入力 Domain=[click-rescue.com] OS=[Unix] Server=[Samba 3.0.1] smb: \> ls . D 0 Sat Apr 17 20:20:25 2004 .. D 0 Sat Apr 17 15:05:13 2004 .bash_profile H 214 Wed Mar 31 02:42:40 2004 Maildir D 0 Wed Mar 31 00:34:28 2004 public_html D 0 Tue Apr 13 00:49:55 2004 sakura D 0 Sat Apr 17 14:43:13 2004 39037 blocks of size 262144. 36679 blocks available smb: \> pwd //Sambaサーバー上のディレクトリ位置の表示 Current directory is \\ns1\homes\ smb: \> lcd //ローカルマシン上のディレクトリ位置の表示 the local directory is now /home/sakura smb: \> cd public_html/cinema smb: \public_html\cinema\> ls . D 0 Wed Mar 31 02:29:19 2004 .. D 0 Tue Apr 13 00:49:55 2004 index.html 568 Wed Mar 31 02:29:10 2004 bbs D 0 Wed Mar 31 02:29:10 2004 cinema_list D 0 Wed Mar 31 02:29:10 2004 diary D 0 Wed Mar 31 02:29:11 2004 gallery D 0 Wed Mar 31 02:29:12 2004 horse D 0 Wed Mar 31 02:29:14 2004 39037 blocks of size 262144. 36679 blocks available smb: \public_html\cinema\> get cinema_index.html getting file \public_html\cinema\cinema_index.html of size 568 as cinema_index.html (1.2 kb/s) (average 1.2 kb/s) smb: \public_html\cinema\> exit |
今度は、LinuxクライアントからWindows 上の共有フォルダにアクセスしてみます。LinuxクライアントからWindows
上の共有フォルダにアクセスするためには、smbmount コマンドを使用して、Windows上の共有フォルダをマウントします。なお、smbclient
実行時に、-o オプションをつけて、Windows 上のユーザー名を指定しておきます。また、codepage=cp932とiocharset=euc-jpを付ける事で日本語ファイル名も正常に表示されるようになります。パスワードを聞かれるので同じくWindows上のパスワードを入力します。/mnt/win
がマウントされているのを確認したら、カレントディレクトリを移動して中身を表示させてみてみてください。
# mkdir /mnt/win //マウントポイントの作成 # smbmount //koro/public_html /mnt/win -o username=administrator,codepage=cp932,iocharset=euc-jp Password: //Windows上のパスワードを入力 # df -h Filesystem Size Used Avail Use% Mounted on /dev/hda10 494M 99M 371M 21% / /dev/hda6 76M 9.2M 63M 13% /boot /dev/hda9 1012M 462M 500M 49% /home none 251M 0 251M 0% /dev/shm /dev/hda7 2.6G 1.8G 754M 71% /usr /dev/hda8 1012M 255M 706M 27% /var //koro/public_html 4.1G 420M 3.7G 11% /mnt/win# cd /mnt/win //マウントポイントに移動 # ls -rwxr-xr-x 1 root root 3.1M Feb 14 12:18 unh_iscsi-1.5-02.i386.rpm.80* -rwxr-xr-x 1 root root 381K Feb 14 12:17 unh-iscsi-1.5.02-tz* drwxr-xr-x 1 root root 4.0K Jan 18 21:37 まとめ/ |
最後に、起動時にも自動的にマウントできるように、/etc/fstab に以下のように記述しておきます。password
が正確でないとマウントできないので気をつけてください。fmask は、ファイルに対するパーミッション、dmask
はディレクトリに対するパーミッションを設定します。共に、「022」にしておく事で、ファイルは644、ディレクトリは755
のパーミッションで新規ファイル/ディレクトリが作成されるようになります。なお、ファイルシステムは、「smbfs
」になります。
# vi /etc/fstab |
/dev/hda1 /mnt/hda1 ext3 noauto 0 0 //koro/share /mnt/win smbfs username=administrator,password=***,rw, codepage=cp932,iocharset=euc-jp,fmask=0222,dmask=0222 0 0 |
設定し終えたら、mount コマンドを実行して正常にマウントできるかどうか確認してください。
# mount /mnt/win |
なお、アンマウントは、通常どおり、umount でも可能ですし、smbumountコマンドを使うこともできます。
# smbumount /mnt/win もしくは、 # umount /mnt/win |
筆者の環境では、RedHat or FedoraCore標準で付属されているsamba-clientパッケージを使用した場合は、問題なくWindows
上の共有ディレクトリがマウントできたのですが、ソースからインストールしたSambaサーバー自体からWindows
を参照しようとすると以下のようなエラーが発生しました。
# smbmount //koro/public_html /mnt/win
-o username=administrator,codepage=cp932,iocharset=euc-jp Password: ****** 1265: session setup failed: ERRDOS - 2215 SMB connection failed |
このようなエラーが表示された場合の解決方法は私が知る限りは2つあります。ひとつは、smb.conf の設定で「
encrypt passwords = yes」とすることで、パスワードを暗号化することです。WindowsNT/200系はパスワードが暗号化されていないと拒否られてしまうみたいです。
# vi /etc/samba/smb.conf |
encrypt passwords = yes |
もうひとつは、smb.conf の設定で、「workgroup = click-rescue.com」と自分のドメインとしているところを、「
workgroup = $OURWINDOWSNTWORKGROUP」のように変数名に変更したところ、あら不思議、普通にマウントできました…。
# vi /etc/samba/smb.conf |
workgroup = $OURWINDOWSNTWORKGROUP |
/etc/rc.d/init.d/smb restart |
念のため、smbfs モジュールが正常にロードされているか確認しておきます。もし、ロードされていなければ、modprobeコマンドなども実行してみてください。
# lsmodModule Size Used by Not tainted nls_cp932 79868 1 (autoclean) nls_euc-jp 4852 0 (autoclean) smbfs 44464 0# modprobe smbfs |
www.it-shikaku.jp
[Top] | |
[講義目次] | |
[2.10:電子メールサービス] | |
[2.11:ファイル共有サービス] | |
[2.11.1 Sambaの設定と管理] | |
[2.11.2 NFSサーバーの設定と管理] | |
[2.12:システムのセキュリティ] | |
[講義検索] | |
[リンク集] |